草庐IT

C++ 对和指针

全部标签

C++ 将 Lambda 与 vector 中的函数指针区分开来

我正在编写一个小的事件管理器类,我在其中将一些函数指针存储在一个vector中。我用std::function作为vector类型,我测试了在其中插入lambdas和普通函数并且它有效:voidt(intp){/*things*/}[...]event.bind([](intp){/*things*/});event.bind(t);现在,(在某个时候我需要删除lambda而不是函数,)我的问题是:是否可以将lambda与函数区分开来?如果是,怎么做?编辑:既然我澄清了我的疑惑,这个问题就如题所示 最佳答案 真正的答案是:你不想这样

c++ - 在 C++ 中使用指针总是不好的吗?

我被告知要避免在C++中使用指针。似乎我无法避免它们,但是在我尝试编写的代码中,或者我可能错过了其他很棒的C++功能。我希望创建一个类(class1),其中包含另一个类(class2)作为数据成员。然后我希望class2了解class1并能够与之通信。我可以将class1引用作为class2中的成员,但这意味着我需要在class2的构造函数中提供对class1的引用作为参数,并使用我不想要的初始化列表。我试图在不需要构造函数的情况下执行此操作。我希望class2有一个名为Initialise的成员函数,它可以接收对class1的引用,但如果不使用指针,这似乎是不可能的。人们会在这里推荐

c++ - 将指针设置为空后通过指针访问函数

这个问题在这里已经有了答案:AccessingclassmembersonaNULLpointer(8个答案)关闭6年前。我不明白下面这段代码是如何产生给定输出的。#includeusingnamespacestd;classMyClass{public:voiddoSomething(){coutdoSomething();ptr=NULL;ptr->doSomething();}输出在doSomething里面里面做某事我执行了一个带有空指针的函数,它实际上调用了该函数。使用ptr的cout检索存储在ptr中的地址表明在语句ptr=NULL之后ptr被设置为0;.但它仍然调用doS

c++ - 从派生类调用时推断 'this' 指针类型?

我在基类中有一个方法需要传递给它的类型以进行一些与类型相关的操作(查找、大小和一些方法调用)。目前它看起来像这样:classbase{templatevoidBindType(T*t);//dosomethingwiththetype};classderived:publicbase{voidfoo(){do_some_workBindType(this);}};classderivedOther:publicbase{voidbar(){do_different_work...BindType(this);}};但是,我想知道是否有一种方法可以获取调用者的类型而不必传递它,以便我的调

c++ - 为什么函数指针地址在 C++ 中以 bool 类型打印?

从下面的代码片段中我得到函数的地址是1。为什么?#includeusingnamespacestd;intadd(intx,inty){intz;z=x+y;cout 最佳答案 函数指针不能转换为数据指针。如果您尝试将一个分配给void*,则会出现编译器错误。多变的。但它们可以隐式转换为bool!这就是为什么booloperator过载在constvoid*上选择一个。要强制执行所需的重载,您需要使用非常强大的C++转换,这将几乎完全忽略静态类型信息。#includeusingnamespacestd;intadd(intx,int

c++ - 共享指针不增加 use_count

我正在尝试了解如何在C++中使用std::shared_ptr。但这很令人困惑,我不明白如何创建指向同一对象的多个共享指针。甚至文档和在线资料也不是很清楚。以下是我编写的一小段代码,用于尝试理解std::shared_ptr的行为:#include#includeusingnamespacestd;classNode{public:intkey;Node(){key=0;}Node(intk){key=k;}};intmain(){Nodenode=Node(10);shared_ptrptr1((shared_ptr)&node);coutptr2=make_shared(node)

c++ - 将 std::unique_ptr 重置为指向数组的指针有什么问题?

我看到如下代码片段:std::unique_ptrmCache;mCache.reset(newuint8_t[size]);有人告诉我这段代码有一些问题。谁能给我一些细节? 最佳答案 给定std::unique_ptrmCache;,当mCache被摧毁了它的deleter将使用delete销毁被管理的指针(如果有的话),即为单个对象释放内存。但是在mCache.reset(newuint8_t[size]);之后什么mCachemanages是指向数组的指针,这意味着它应该使用delete[]反而;使用delete为数组释放内存

c++ - C++ 函数可以返回一个指向已知长度数组的指针吗?

我有一个包含constchar的staticconstexpr数组的类,我想通过c_str()方法:classmy_class{private:staticconstexprconstcharc_str_[6]={'c','h','a','r','s','\0'};public:staticconstexprconstchar*c_str(){returnc_str_;}};这有效,但有一个不幸的影响:它从类型中删除指向数组的长度:decltype(my_class::c_str())//equivalenttoconstchar*我真正想要的是实现这一目标的某种方式:decltype

C++ 悬挂指针和内存泄漏

我很难理解如何区分悬挂指针和内存泄漏。最近的一个作业有几个问题很纳闷,看了之后还是很纳闷。我不希望有人为我做功课,我希望能够理解为什么事情是这样的,如果这有意义的话。那么,作业:鉴于声明:int*ptrA,*ptrB;判断下面的每个代码段是否会导致内存泄漏、悬空指针或两者都不会。画图来帮忙。我猜这没问题,因为ptrA已经指向内存中的某些内容,所以这既不是悬挂指针也不是内存泄漏。ptrA=newint;ptrB=newint;*ptrA=345;ptrB=ptrA;我猜这是一个悬垂指针,因为345已从内存中释放,所以ptrB没有指向任何内容。ptrA=newint;*ptrA=345;p

c++ - 通过 emplace() 将对象指针插入到 map 的 map 中不起作用

我正在尝试将指针对象插入到map通过emplace()但它不起作用。我在下面创建了一个简单的问题表示。我正在尝试插入newFooList指针对象类型Foo*.我似乎找不到为FooMap*创建类型的方法在std::mapm_fooMapList.应该用new来完成吗?在map的第二个区域?#include#include#include#include#includeclassFoo{private:intm_foobar;public:Foo(intvalue){m_foobar=value;}voidsetfoobar(intvalue);intgetfoobar();};class